#include <stdio.h>
#include <string.h>
#include <math.h>

struct ddd
{
	char name[30];
	int money;
}tt[30];
int n;
int t;


int getname(char *s)
{
	int i;
	for (i=1;i<=n;i++)
		if (strcmp(tt[i].name,s)==0)
			return i;
	return -1;
}
int findtwo(int &a, int &b)
{
	int i;
	a=0;b=0;
	for (i=1;i<=n;i++)
		if (tt[i].money>0) 
		{
			a=i;
			break;
		}
	for (i=1;i<=n;i++)
		if (tt[i].money<0) 
		{
			b=i;
			break;
		}
	if (a && b) return 1;
	return 0;

}

main()
{
	int i,j;
	char s1[30],s2[30];
	int pay;
	int a,b;
	int icase=0;
	while (1)
	{
		scanf("%d%d", &n, &t);
		if (n==0) break;
		for (i=0;i<=29;i++) tt[i].money=0;
		for (i=1;i<=n;i++)
			scanf("%s",tt[i].name);
		for (i=1;i<=t;i++)
		{
			scanf("%s%s", s1,s2);
			scanf("%d", &pay);
			a=getname(s1);
			b=getname(s2);
			tt[a].money-=pay;
			tt[b].money+=pay;
		}
		printf("Case #%d\n",++icase);
		
//		for (i=1;i<=n;i++) printf("%d ",tt[i].money);/
//		printf("\n");
		while (findtwo(a,b))
		{
			if (abs(tt[a].money) >= abs(tt[b].money))
			{
				pay=-tt[b].money;
				tt[b].money=0;
				tt[a].money-=pay;
				printf("%s %s %d\n",tt[a].name,tt[b].name,pay);
			}
			else
			{
				pay=tt[a].money;
				tt[a].money=0;
				tt[b].money+=pay;
				printf("%s %s %d\n",tt[a].name,tt[b].name,pay);


			}


		}
		
		printf("\n");
		
			
	}

	return 0;
}